Вычислить расхождение массивов

362
27 мая 2017, 19:20

Есть два массива

Array
    (
[firstname] => Тара
[lastname] => Садовский
[telephone] => +389665544121
[email] => pd@gmail.com
[suppliers] => dvdfdsf
[sum_] => 800
[method_delivery] => Новая почта
[region] => 7150812c-9b87-11de-822f-000c2965ae0e
[city] => 09af1b85-22c7-11e4-acce-0050568002cf
[address] => Отделение №1: ул. Московская, 5
[ttn] => 20400045650240
[order_status_id] => 1
[date_modified] => 2017-05-26
[comment] => Коментарий
[customer_id] => 1
[order_id] => 30
[product_name] => Array
(
    [0] => Смарn
    [1] => Часn
    )
[model_product] => Array
(
    [0] => Часы
    [1] => часы
    )
[price] => Array
(
    [0] => 7.36
        [1] => 8.20
    )
[currency] => Array
(
    [0] => USD
    [1] => USD
    )
[total] => Array
(
    [0] => 450.00
        [1] => 40.00
    )
[product_id] => Array
(
    [0] => 707
        [1] => 749
        [2] => 745
        [3] => 750
    )
[quantity] => Array
(
    [0] => 1
        [1] => 1
    )
[oll_total] => Array
(
    [0] => 400.00
        [1] => 400.00
        [2] => 400.00
        [3] => 400.00
    )
[order_product_id] => Array
(
    [0] => 749
        [1] => 750
    )
)

Array
    (
[firstname] => Тарас
[lastname] => Садовский
[telephone] => +389665544121
[email] => pd@gmail.com
[suppliers] => dvdfdsf
[sum_] => 800
[method_delivery] => Новая почта
[region] => 7150812c-9b87-11de-822f-000c2965ae0e
[city] => 09af1b85-22c7-11e4-acce-0050568002cf
[address] => Отделение №1: ул. Московская, 5
[ttn] => 20400045650240
[order_status_id] => 1
[date_modified] => 2017-05-26
[comment] => Коментарий
[customer_id] => 1
[order_id] => 30
[product_name] => Array
(
    [0] => Смарn
    [1] => Часn
    )
[model_product] => Array
(
    [0] => Часы
    [1] => часы
    )
[price] => Array
(
    [0] => 7.36
        [1] => 8.20
    )
[currency] => Array
(
    [0] => USD
    [1] => USD
    )
[total] => Array
(
    [0] => 450.00
        [1] => 40.00
    )
[product_id] => Array
(
    [0] => 707
        [1] => 749
        [2] => 745
        [3] => 750
    )
[quantity] => Array
(
    [0] => 1
        [1] => 1
    )
[oll_total] => Array
(
    [0] => 400.00
        [1] => 400.00
        [2] => 400.00
        [3] => 400.00
    )
[order_product_id] => Array
(
    [0] => 749
        [1] => 750
    )
)

отличаются поля firstname есть функция array_udiff которая вычисляет расхождение массивов

    public function add_history_edit_order($data){
    $orders = $this->db->query("SELECT firstname, lastname, email, 
    telephone, sum_, ttn, payment_address_1, payment_city, payment_zone, 
    payment_method, comment, suppliers, order_status_id   FROM " . DB_PREFIX 
    . "order WHERE order_id = '" . $_POST['order_id'] . "'")->row;
    $order_product = $this->db->query("SELECT * FROM " . DB_PREFIX . 
    "order_product WHERE order_id = '" . $_POST['order_id'] . "'")->rows;
    $product_name = array();
    $model_product = array();
    $quantity = array();
    $price = array();
    $total = array();
    $oll_total = array();
    foreach($order_product as $value){
        $product_name['product_name'][] = $value['name'];
        $model_product['model_product'][]= $value['model'];
        $quantity['quantity'][]= $value['quantity'];
        $price['price'][] = $value['price'];
        $total['total'][] = $value['total'];
        $oll_total['oll_total'][] = $value['oll_total'];
    }
    $result = array_merge($orders, $product_name, $model_product, $quantity, $price, $total, $oll_total);
    $arr = array_udiff($result, $data, 'add_history_edit_order');
    print_r($arr);

    //$this->db->query("INSERT INTO " . DB_PREFIX . "history_edit_order SET order_id = '" . $_POST['order_id'] . "', firstname = '" . $firstname . "', lastname = '" . $lastname . "', telephone = '" . $telephone .    "', email = '" . $email .  "', suppliers = '" . $suppliers . "', sum_ = '" . $sum_ . "', method_delivery = '" . $method_delivery .  "', region = '" . $region . "', city = '" . $city .  "', address = '" . $address .  "', order_status_id = '" . $order_status_id .  "', comment = '" . $comment . "', time_history = '" . date('H:i:s') . "', date_history = NOW()");
}`

получаю следующую ошибку array_udiff() expects parameter 3 to be a valid callback,

Answer 1

У вас ошибка из за того что вы приподносите метод add_history_edit_order класса как функцию.

Пример array_undiff с использованием метода как функцию callback

 $arr = array_udiff($result, $data, array($this,'add_history_edit_order'));

И как я увидел из вошего отрезка кода, вы в самом метоте делаете array_udiff и используете сам метод где находиться ваш код.

Это называется рекурсией, я не уверен что это вам нужно но будьте осторожны.

READ ALSO
Поле ввода input на php

Поле ввода input на php

Всем приветУ меня есть поле ввода от 0 до 10, как мне сделать так, что бы в данном поле по умолчанию всегда стояла цифра 0?

250
Bitrix добавить колонку в таблицу БД

Bitrix добавить колонку в таблицу БД

Всем приветЕсть таблица, а в ней есть колонки и значения

448
Как вывести массив из массива?

Как вывести массив из массива?

Есть массив вида:

230
WideImage прозрачный холст

WideImage прозрачный холст

Как при помощи WideImage создать изображение размером x на y с прозрачный фоном, для того чтобы в дальнейшем на него наложить другие картинки, другими...

252