我有阵列:
Array ( [0] => Array ( [0] => Apples [Query] => Apples ) [1] => Array ( [0] => Bananas [Query] => Bananas ) [2] => Array ( [0] => Bananas [Query] => Bananas ) [3] => Array ( [0] => Oranges [Query] => Oranges ) )
不幸的是我无法控制这个数组的原始结构。所以这就是我们必须要合作的。
我要做的是仅删除与我定义的自定义值匹配的第一个键值对。
例如:
$toRemove = 'Bananas';
应用于未知的奇迹代码将导致:
Array ( [0] => Array ( [0] => Apples [Query] => Apples ) [2] => Array ( [0] => Bananas [Query] => Bananas ) [3] => Array ( [0] => Oranges [Query] => Oranges ) )
请注意第二组Bananas值如何保持不变。我不介意你想重新索引,因为这会产生差距。
如果它不够具有挑战性,则需要在没有for循环的情况下完成。
答案 0 :(得分:3)
循环和检查可能很有用。
$toRemove = 'Bananas';
foreach($yourArray as $key => $value) {
if($value[0] === $toRemove) { // add more checks if you need ($value['Query'] === $toRemove)
unset($yourArray[$key]);
break;
}
}
答案 1 :(得分:0)
如果你的数组没有修复,那么,
尝试此功能: -
function remove_element_by_value($arr, $val) {
$return = array();
foreach($arr as $k => $v) {
if(is_array($v)) {
$return[$k] = remove_element_by_value($v, $val); //recursion
continue;
}
if($v == $val) continue;
$return[$k] = $v;
}
return $return;
}
$result = remove_element_by_value($arr,'Bananas');
希望它会对你有所帮助:)。
答案 2 :(得分:0)
......这需要在没有for循环的情况下完成。
如果您不想使用任何类型的循环,请遵循以下递归方法:
function removeElement(&$origArr, $arr, $element, $prevKey = null){
static $flag = false;
if($flag){
return;
}
if(is_array(current($arr))){
removeElement($origArr, next($arr), $element, key($arr));
}else{
if(current($arr) == $element){
$flag = true;
unset($origArr[$prevKey]);
return;
}else{
removeElement($origArr, next($arr), $element, key($arr));
}
}
}
// suppose $arr is your original array
removeElement($arr, $arr, 'Bananas');
// display $arr array
var_dump($arr);
输出:
array (size=3)
0 =>
array (size=2)
0 => string 'Apples' (length=6)
'Query' => string 'Apples' (length=6)
2 =>
array (size=2)
0 => string 'Bananas' (length=7)
'Query' => string 'Bananas' (length=7)
3 =>
array (size=2)
0 => string 'Oranges' (length=7)
'Query' => string 'Oranges' (length=7)
以下是相关参考资料:
稍后,如果您想以数字方式重新排列索引,请使用array_values()
函数,如下所示:
removeElement($arr, $arr, 'Bananas');
$newArr = array_values($arr);
var_dump($newArr);