Zheleznov
@Zheleznov

Как найти значения одного массива в другом и вывести их?

Добрый день
Плохо разбираюсь в php, помогите пожалуйста решить задачку

Нужно найти по sku значения массива и вывести их

// Массив из которого надо получить значения по SKU
$arr = [
	["sku" => '1',  "name" => '1111', "price" => '1111'],
	["sku" => '2',  "name" => '2222', "price" => '2222'],
	["sku" => '3',  "name" => '3333', "price" => '3333'],
	["sku" => '4',  "name" => '4444', "price" => '4444'],
	["sku" => '5',  "name" => '5555', "price" => '5555'],
	["sku" => '6',  "name" => '6666', "price" => '6666'],
	["sku" => '7',  "name" => '7777', "price" => '7777'],
	["sku" => '8',  "name" => '8888', "price" => '8888'],
	["sku" => '9',  "name" => '9999', "price" => '9999'],
	["sku" => '10', "name" => '1010', "price" => '1010'],
	["sku" => '11', "name" => '1111', "price" => '1111'],
	["sku" => '12', "name" => '1212', "price" => '1212'],
	["sku" => '13', "name" => '1313', "price" => '1313'],
	["sku" => '14', "name" => '1414', "price" => '1414'],
	["sku" => '15', "name" => '1515', "price" => '1515'],
	["sku" => '16', "name" => '1616', "price" => '1616'],
	["sku" => '17', "name" => '1717', "price" => '1717'],
	["sku" => '18', "name" => '1818', "price" => '1818']
];

// Массив с нужными SKU
$torgPred = ['3','5','7','11','18'];

// Новый массив состоящий из нужных SKU, NAME, PRICE
$newArr = [];
$i=0;
foreach( $arr as $row ){    
	 
	if ( $row['sku'] = $torgPred[$i] ) {
		array_push($newArr, [ 'sku' => $row['sku'], 'name' => $row['name'], 'price' => $row['price'] ] );
	} $i++;  
		
}


Но в итоге получаем вот это:

Array
(
    [0] => Array
        (
            [sku] => 5
            [name] => 2222
            [price] => 2222
        )

    [1] => Array
        (
            [sku] => 7
            [name] => 3333
            [price] => 3333
        )

    [2] => Array
        (
            [sku] => 11
            [name] => 4444
            [price] => 4444
        )

    [3] => Array
        (
            [sku] => 18
            [name] => 5555
            [price] => 5555
        )

)


а должно быть так

Array
(
    [0] => Array
        (
            [sku] => 5
            [name] => 5555
            [price] => 5555
        )

    [1] => Array
        (
            [sku] => 7
            [name] => 7777
            [price] => 7777
        )

    [2] => Array
        (
            [sku] => 11
            [name] => 1111
            [price] => 1111
        )

    [3] => Array
        (
            [sku] => 18
            [name] => 1818
            [price] => 1818
        )

)


Подскажите пожалуйста где ошибка и как исправить?
  • Вопрос задан
  • 121 просмотр
Решения вопроса 2
0xD34F
@0xD34F
$arr2 = array_combine(array_column($arr, 'sku'), $arr);
$result = array_map(fn($n) => $arr2[$n], $torgPred);

или

$result = array_filter($arr, fn($n) => in_array($n['sku'], $torgPred));
Ответ написан
DoNiFF
@DoNiFF
Backend Developer
// Массив из которого надо получить значения по SKU
$arr = [
    ["sku" => '1',  "name" => '1111', "price" => '1111'],
    ["sku" => '2',  "name" => '2222', "price" => '2222'],
    ["sku" => '3',  "name" => '3333', "price" => '3333'],
    ["sku" => '4',  "name" => '4444', "price" => '4444'],
    ["sku" => '5',  "name" => '5555', "price" => '5555'],
    ["sku" => '6',  "name" => '6666', "price" => '6666'],
    ["sku" => '7',  "name" => '7777', "price" => '7777'],
    ["sku" => '8',  "name" => '8888', "price" => '8888'],
    ["sku" => '9',  "name" => '9999', "price" => '9999'],
    ["sku" => '10', "name" => '1010', "price" => '1010'],
    ["sku" => '11', "name" => '1111', "price" => '1111'],
    ["sku" => '12', "name" => '1212', "price" => '1212'],
    ["sku" => '13', "name" => '1313', "price" => '1313'],
    ["sku" => '14', "name" => '1414', "price" => '1414'],
    ["sku" => '15', "name" => '1515', "price" => '1515'],
    ["sku" => '16', "name" => '1616', "price" => '1616'],
    ["sku" => '17', "name" => '1717', "price" => '1717'],
    ["sku" => '18', "name" => '1818', "price" => '1818']
  ];
  
  // Массив с нужными SKU
  $torgPred = ['3','5','7','11','18'];
  
  // Новый массив состоящий из нужных SKU, NAME, PRICE
  $newArr = [];

  for($i = 0; $i < count($torgPred); $i++)
  {
    foreach($arr as $value)
    {
        if($torgPred[$i] == $value["sku"])
        {
            $newArr[] = $value;
        }
    }
  }

  echo "<pre>";
  print_r($newArr);
  echo "</pre>";
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
20 июл. 2024, в 15:20
20000 руб./за проект
20 июл. 2024, в 15:19
300 руб./в час
20 июл. 2024, в 14:26
450000 руб./за проект