由于我看不到您的数组,我不知道哪些是整数,哪些是关联的,等等。
据我所知,没有理由引用 $u_value。它不会造成任何伤害,但无论哪种方式都没有区别。
更重要的是,任何时候你的第二个 if 条件为真,在你在线到达它之前你都会遇到错误
$link_row['value'] = $args[ $u_value ];
也许你想使用
$link_row['value'] = isset($args[$u_value]) ? $args[ $u_value ] : "NOT PRESENT";
你提到的那行似乎工作得很好。
我的代码:
$args = array(100,200,300,400,500);
$unique_links = array (array( 'a' => array('attribute_name' => 1,'x' => 2, 'y' => 3, 'z' =>4),
'b' => array('attribute_name' => 3,'x' => 2, 'y' => 3, 'z' =>4),
'c' => array('attribute_name' => 0,'x' => 2, 'y' => 3, 'z' =>4),
'd' => array('attribute_name' => 7,'x' => 2, 'y' => 3, 'z' =>4),
'e' => array('attribute_name' => 1,'x' => 2, 'y' => 3, 'z' =>4)
));
echo_r($unique_links);
foreach ($unique_links as $link_id => &$link_attr)
{
foreach($link_attr as &$link_row)
{
foreach($link_row as $u_attr => $u_value)
{
echo "     $u_attr is $u_value <br />";
if ($u_attr == 'attribute_name')
{
// Assign a the attribs value to the array
$link_row['value'] = isset($args[$u_value]) ? $args[ $u_value ] : "NOT PRESENT";
// If one of the values for the unique key is blank, we can remove the entire
// set from being checked
if ( !isset($args[ $u_value ]) )
{
//echo "want to kill: $link_id <br />";
//unset($unique_links[$link_id] );
}
}
}
echo "<br />";
}
}
echo_r($unique_links);
我的输出:
Array
(
[0] => Array
(
[a] => Array
(
[attribute_name] => 1
[x] => 2
[y] => 3
[z] => 4
)
[b] => Array
(
[attribute_name] => 3
[x] => 2
[y] => 3
[z] => 4
)
[c] => Array
(
[attribute_name] => 0
[x] => 2
[y] => 3
[z] => 4
)
[d] => Array
(
[attribute_name] => 7
[x] => 2
[y] => 3
[z] => 4
)
[e] => Array
(
[attribute_name] => 1
[x] => 2
[y] => 3
[z] => 4
)
)
)
attribute_name is 1
x is 2
y is 3
z is 4
value is 200
attribute_name is 3
x is 2
y is 3
z is 4
value is 400
attribute_name is 0
x is 2
y is 3
z is 4
value is 100
attribute_name is 7
x is 2
y is 3
z is 4
value is NOT PRESENT
attribute_name is 1
x is 2
y is 3
z is 4
value is 200
Array
(
[0] => Array
(
[a] => Array
(
[attribute_name] => 1
[x] => 2
[y] => 3
[z] => 4
[value] => 200
)
[b] => Array
(
[attribute_name] => 3
[x] => 2
[y] => 3
[z] => 4
[value] => 400
)
[c] => Array
(
[attribute_name] => 0
[x] => 2
[y] => 3
[z] => 4
[value] => 100
)
[d] => Array
(
[attribute_name] => 7
[x] => 2
[y] => 3
[z] => 4
[value] => NOT PRESENT
)
[e] => Array
(
[attribute_name] => 1
[x] => 2
[y] => 3
[z] => 4
[value] => 200
)
)
)
我注释掉 unnset 因为它似乎会杀死整个数组,而不仅仅是你想要的部分。我猜这是由于杀死了您当前正在迭代的部分而导致的一些奇怪行为。