Поскольку я не вижу ваши массивы, я не знаю, какие из них являются целыми, какие ассоциируются и т. Д.
Насколько я понимаю, нет причин для ссылки на $ u_value.Это не приносит никакого вреда, но в любом случае не имеет значения.
Что еще более важно, каждый раз, когда вы выполняете второе условие, если вы выполняете условие, у вас будет ошибка, прежде чем вы достигнете его в строке
$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, потому что кажется, что он убивает весь массив, а не только часть, которую вы намереваетесь.Я думаю, это странное поведение из-за убийства той части, которую вы сейчас повторяете.