многомерный массив php, поиск и обновление, если существует, или вставка, если нет - PullRequest
2 голосов
/ 10 января 2012

Я искал и ничего не нашел по этому вопросу.

Я хотел бы получить несколько советов или указаний о том, как можно искать в многомерном массиве и обновлять, если значение существует, или вставить, если его нет.

Например.в данный момент я создаю массив со следующими значениями:

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 ]

4 голосов
/ 10 января 2012
$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, ...);
}

Существуют более элегантные способы индексировать данные, чтобы быстрее находить их без всякого циклического повторения, но по сути это основной алгоритм, который вы ищете.

0 голосов
/ 10 января 2012

Предположим, ваше имя массива 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 */
}
0 голосов
/ 10 января 2012

Взято из одного из комментариев в документации PHP str_replace():

<?php 
function str_replace_json($search, $replace, $subject){ 
    return json_decode(str_replace($search, $replace,  json_encode($subject))); 
} 
?> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...