php多维数组,如果存在则搜索和更新,否则插入

时间:2012-01-10 04:20:00

标签: php arrays search insert

我搜索过,发现没有。

我想了解如何搜索多维数组并更新值是否存在或如果不存在则插入。

EG。目前我用这样的值创建一个数组:

Array
(
[0] => Array
    (
        [quantity] => 1
        [supplier_paypal] => paypalaccount1@paypal.com
        [supplier_price] => 10
    )

[1] => Array
    (
        [quantity] => 2
        [supplier_paypal] =>  paypalaccount2@paypal.com
        [supplier_price] => 20
    )

    )

现在这很好但是它只是循环而且可以在数组中创建重复的电子邮件地址。我需要一些东西,我可以在循环中搜索以查看电子邮件是否存在以及是否存在然后只是将供应商价格加在一起。

任何帮助或想法?

继承了我的尝试:

 $arrIt = new RecursiveIteratorIterator(
 new RecursiveArrayIterator($this->data['payrecipient_data']));

foreach ($arrIt as $sub) {
$subArray = $arrIt->getSubIterator();
if ($subArray['supplier_paypal'] === $supplier_info['supplier_paypal']) {

    $this->data['payrecipient_dup'][] = iterator_to_array($subArray);
} else {
    $this->data['payrecipient_nondup'][] = iterator_to_array($subArray);
}
}

这使我能够搜索并将数组分成重复的组和没有重复的组。

但我不知道从哪里开始更新阵列,所以我迷路了。

3 个答案:

答案 0 :(得分:4)

$needle = 'foo@bar.com';

$found = false;
foreach ($array as &$element) {
    if ($element['supplier_paypal'] == $needle) {
        // update some data
        $element['foo'] = 'bar';
        $found = true;
        break;
    }
}
unset($element);

if (!$found) {
    $array[] = array('supplier_paypal' => $needle, ...);
}

有更优雅的方法可以将数据编入索引以便更快地找到它而不必每次循环遍历整个事物,但这基本上是您正在寻找的基本算法。

答案 1 :(得分:0)

取自PHP的one of the comments文档中的str_replace()

<?php 
function str_replace_json($search, $replace, $subject){ 
    return json_decode(str_replace($search, $replace,  json_encode($subject))); 
} 
?> 

答案 2 :(得分:0)

假设您的阵列名称是arr1。 使用以下

$email = /*Your email to check*/;
$flag = 0;  // td check if email has found or not

foreach($arr1 as $temp)
{
    if($temp->supplier_paypal == $email) //email matches
    {
        /*add supplier price....*/
        $flag=1;
    }
}

if($flag == 0)
{
   /*Your logic */
}
相关问题