我正在使用Cassandra,我已经保存了一些字节表示作为ID。一切都运行正常,但数据(id)对输出没有好处。
$users = $db->get('1');
echo '<pre>';
print_r($users);
die();
输出
Array
(
[��� X��W��c_ ] => Array
(
[id] => ��� X��W��c_
[name] => steve
[surname] => moss
)
[�*B�X��y�~p��~] => Array
(
[id] => �*B�X��y�~p��~
[name] => john
[surname] => doe
)
)
正如您所看到的,ID是一些奇怪的字符,这是因为它们是数据库中的字节表示。它们实际上看起来像\xf5*B\xa0X\x00\x11\xe1\x99y\xbf~p\xbc\xd1~
。
在PHPCASSA中有一个函数CassandraUtil::import();
我可以传递这些字节,它将返回guid。它工作正常,但我希望我的数组自动从字节转换为guids。
我找到的唯一选项是循环遍历数组中的每个项目并为其分配新值。不知怎的,我认为这不是最好的方法。还有其他方法吗?
TL; DR
有像上面这样的字节的数组,需要在数组键和id上使用CassandraUtil::import();
来获取可读的id。这样做最有效的方法是什么。
答案 0 :(得分:0)
<强>更新强>
抱歉,只看到了顶级数组键,我认为你必须运行下面的函数以及另一个函数:
function cassImportWalkRecur(&$item, $key)
{
if ($key == 'id')
$item = CassandraUtil::import();
}
$array = array_walk_recursive($array, 'cassImportWalkRecur');
这应该将它应用于ID字段。如果您需要先检查数据,可能有办法检测编码,但我不知道该怎么做。
您应该能够创建一个函数并使用array_walk
遍历数组并更新密钥。类似的东西:
function cassImportWalk($item, &$key)
{
$key = CassandraUtil::import();
}
$array = array_walk($array, 'cassImportWalk');
未经测试(也可能需要更改CassandraUtil用法),但应该工作。
答案 1 :(得分:0)
除非我误解了这个问题,否则这可以简单而干净地完成:
$users = $db->get('1');
$keys = array_keys($users);
$readableKeys = array_map("CassandraUtil::import",$keys);
foreach($users as $currentKey => $subArray) {
$readableKey = array_shift($readableKeys);
$subArray['id'] = $readableKey;
$users[$readableKey] = $subArray;
unset($users[$currentKey]);
}
答案 2 :(得分:0)
在做最终array_flip()
之前,array_walk()
会array_flip()
所有键和值,然后<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.example.sayan.kennel.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"/>
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tab"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:id="@+id/viewpager"/>
<include layout="@layout/content_main" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
并应用我的函数。